package com.pkk.cloud.support.oauth2.client.aspect;

import com.pkk.cloud.support.oauth2.client.aspect.aspect.AuthAspect;
import com.pkk.cloud.support.oauth2.client.authurl.api.AuthToAccessApiHystrix;
import com.pkk.cloud.support.oauth2.client.authurl.inter.impl.OAuth2UrlAuthProvider;
import com.pkk.cloud.support.oauth2.client.url.EnableIgnoreUrl;
import com.pkk.cloud.support.oauth2.client.url.properties.IgnoreUrlProperties;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.Import;

/**
 * @author peikunkun<br>
 * @version V1.0<br>
 * @Title: 启用权限接口拦截<br>
 * @Description: <><br>
 * @date 2020/3/21 0021 下午 2:28<br>
 * @URL:[]
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
//类继承关系中，子类会继承父类使用的注解中被@Inherited修饰的注解
//接口继承关系中，子接口不会继承父接口中的任何注解，不管父接口中使用的注解有没有被@Inherited修饰
//类实现接口时不会继承任何接口中定义的注解
@Inherited
//开启AOP代理自动配置，如果配@EnableAspectJAutoProxy表示使用cglib进行代理对象的生成；设置@EnableAspectJAutoProxy(exposeProxy=true)表示通过aop框架暴露该代理对象，aopContext能够访问.
@EnableAspectJAutoProxy
@EnableIgnoreUrl
//AuthAspect权限接口的鉴权，AuthToAccessApiHystrix调用权限接口鉴权的熔断器,OAuth2UrlAuthProvider鉴权接口的请求处理器
@Import({AuthAspect.class, AuthToAccessApiHystrix.class, OAuth2UrlAuthProvider.class})
//鉴权接口的忽略接口属性配置
@EnableConfigurationProperties(IgnoreUrlProperties.class)
public @interface EnableOAuth2Aspect {
}
